﻿//using System;
//using System.Collections;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Threading;
//using Hotel.UI.Common.Cache;

//namespace Hotel.UI.Common.Services
//{
//    public class ServicerManager
//    {
//        Dictionary<string, Request> requestsList = new Dictionary<string, Request>();
//        object oRequests = new object();

//        System.Timers.Timer requestScanTimer = new System.Timers.Timer();
//        private Communicator Sender = null;
//        public ServicerManager()
//        {
//            Sender = new Communicator((r) => ResponseCallBack(r));

//            requestScanTimer.Interval = 0.5 * 1000;//毫秒
//            requestScanTimer.Elapsed += new System.Timers.ElapsedEventHandler(OnScanEvent);
//            requestScanTimer.AutoReset = true;//每到指定时间Elapsed事件是到时间就触发
//            requestScanTimer.Enabled = true; //指示 Timer 是否应引发 Elapsed 事件。

//        }

//        private void OnScanEvent(object sender, System.Timers.ElapsedEventArgs e)
//        {
//            lock (oRequests)
//            {
//                foreach (var item in requestsList.ToList())
//                {
//                    if (DateTime.Now.Subtract(item.Value.CreateTime).TotalSeconds > 10)//10秒认为请求已超时
//                        requestsList.Remove(item.Key);
//                }

//            }
//        }

//        public void GetService(string requestRoute, string para, Action<Response> action)
//        {
//            if (requestsList.ContainsKey(requestRoute))
//            {
//                action?.Invoke(new Response("操作太频繁,请稍后再试", ResponseCodes.ERROR_PROXY_FREQ_CONTROL));
//                return;
//            }
//            var request = new Request();
//            lock (oRequests)
//            {
//                requestsList.Add(requestRoute, request);
//            }

//            if (new Random().Next(10, 10) > 5)
//                request.Protocol = "asdf";
           
//                System.Diagnostics.Trace.WriteLine("发送请求");
//                Sender.Send(request);
//                System.Diagnostics.Trace.WriteLine("发送请求....");
       
//            // w
//            //System.Diagnostics.Trace.WriteLine("action:" + action?.GetHashCode());
//            //System.Diagnostics.Trace.WriteLine("para:" + para.GetHashCode());
//            //if (!MemoryCacheHelper.Contains("abc"))
//            //{
//            //    MemoryCacheHelper.GetOrAddCacheItem<string>("abc", () => { return "时间:" + DateTime.Now.ToString("MM-dd HH:mm:ss"); }, absoluteExpiration: DateTime.Now.AddSeconds(5));
//            //    action?.Invoke(new Response("没有缓存"));
//            //}
//            //else
//            //{
//            //    action?.Invoke(new Response("有缓存:" + MemoryCacheHelper.GetCacheItem<string>("abc")));
//            //    return;
//            //}
//        }

//        public void ResponseCallBack(Response response)
//        {
//            lock (oRequests)
//            {

//                if (!requestsList.ContainsKey(response.Route))
//                {
//                    System.Diagnostics.Trace.WriteLine("请求超时被删除了?" + response.Route);
//                    //超时被删除了???
//                    return;
//                }


//                var request = requestsList[response.Route];


//                if (request.RequestId != response.RequestId)
//                {
//                    System.Diagnostics.Trace.WriteLine("不是客户端发起的请求响应?" + response.Route);
//                    //不是客户端发起的请求响应

//                    return;
//                }

//                requestsList.Remove(response.Route);
//                //处理客户端发起的请求响应
//                //先保存至缓存?
//                request.CallBack?.Invoke(response);
//            }


//        }



//    }
//}
